package us.wili.dev.third.util.example.cases;

import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import us.wili.dev.common.util.xinge.v2.XinGeProperties;
import us.wili.dev.common.util.xinge.v2.XinGeUtil;
import us.wili.dev.common.util.xinge.v2.consts.EnvironmentEnum;
import us.wili.dev.common.util.xinge.v2.consts.MessageTypeEnum;
import us.wili.dev.common.util.xinge.v2.exception.XinGeException;
import us.wili.dev.common.util.xinge.v2.model.req.android.AndroidMsg;
import us.wili.dev.common.util.xinge.v2.model.req.ios.Alert;
import us.wili.dev.common.util.xinge.v2.model.req.ios.Aps;
import us.wili.dev.common.util.xinge.v2.model.req.ios.IOSMsg;
import us.wili.dev.common.util.xinge.v2.model.req.push.AccountListReq;
import us.wili.dev.common.util.xinge.v2.model.req.push.SingleAccountReq;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 腾讯信鸽推送示例
 * 示例只阐述了工具的部分方法，更多方法的使用，请对比文档，文档地址：https://cloud.tencent.com/document/product/666/14826
 * <p>
 * author: lefore
 * date: 2018/9/30
 */
public class XinGeCase {

    private static final Logger logger = LoggerFactory.getLogger(XinGeCase.class);

    @Autowired
    private XinGeUtil xinGeUtil;

    /**
     * 给单个设备的账户推送通知（信鸽 v2 版本接口只支持推送给一个平台，要么推送给安卓、要么推送给 IOS，不支持一个接口多平台推送）
     */
    public void sendMsgToAccount() {
        // 用户自定义的 key-value
        Map<String, Object> customContentMap = new HashMap<>();
        customContentMap.put("lefore_type", 1);

        // Android 消息
        AndroidMsg androidMsg = new AndroidMsg();
        androidMsg.setTitle("通知栏标题");
        androidMsg.setContent("通知栏内容");
        androidMsg.setCustom_content(customContentMap);

        SingleAccountReq req = new SingleAccountReq();
        req.setAccount("lefore");                                   // 通知帐号
        req.setMessage_type(MessageTypeEnum.NOTICE.getCode());      // 消息类型
        req.setMessage(androidMsg.toJson());

        // IOS 消息
//        Alert alert = new Alert();
//        alert.setTitle("通知栏标题");
//        alert.setBody("通知栏内容");
//        Aps aps = new Aps();
//        aps.setAlert(alert);
//        IOSMsg iosMsg = new IOSMsg();
//        iosMsg.setAps(aps);
//        iosMsg.setCustomContent(customContentMap);
//
//        SingleAccountReq req = new SingleAccountReq();
//        req.setAccount("lefore");                                   // 通知帐号
//        req.setMessage_type(MessageTypeEnum.NOTICE.getCode());      // 消息类型
//        req.setMessage(iosMsg.toJson());
//        req.setEnvironment(xinGeUtil.getXinGeProp().getProductionOrDev() ? EnvironmentEnum.IOS_PRODUCTION.getCode() : EnvironmentEnum.IOS_DEV.getCode());

        try {
            // 推送消息
            xinGeUtil.getPushService().singleAccont(req);
        } catch (XinGeException e) {
            logger.error("推送失败", e);
        }
    }

    /**
     * 给批量设备的账户推送通知（信鸽 v2 版本接口只支持推送给一个平台，要么推送给安卓、要么推送给 IOS，不支持一个接口多平台推送）
     */
    public void sendMsgToAccountList() {
        // 用户自定义的 key-value
        Map<String, Object> customContentMap = new HashMap<>();
        customContentMap.put("lefore_type", 1);

        // 推送的帐户列表
        String accoutList = JSON.toJSONString(Arrays.asList("lefore"));

        String androidOrIOSMessage = "";

        // Android 消息
        AndroidMsg androidMsg = new AndroidMsg();
        androidMsg.setTitle("通知栏标题");
        androidMsg.setContent("通知栏内容");
        androidMsg.setCustom_content(customContentMap);

        androidOrIOSMessage = androidMsg.toJson();

        // IOS 消息
//        Alert alert = new Alert();
//        alert.setTitle("通知栏标题");
//        alert.setBody("通知栏内容");
//        Aps aps = new Aps();
//        aps.setAlert(alert);
//        IOSMsg iosMsg = new IOSMsg();
//        iosMsg.setAps(aps);
//        iosMsg.setCustomContent(customContentMap);
//
//        androidOrIOSMessage = iosMsg.toJson();

        AccountListReq req = new AccountListReq();
        req.setAccount_list(accoutList);
        req.setMessage_type(MessageTypeEnum.NOTICE.getCode());
        req.setMessage(androidOrIOSMessage);
        // 推送给苹果设备的帐号需要设置 Environment，推送给安卓设备无需设置
        if (true) {
            req.setEnvironment(xinGeUtil.getXinGeProp().getProductionOrDev() ? EnvironmentEnum.IOS_PRODUCTION.getCode() : EnvironmentEnum.IOS_DEV.getCode());
        }

        try {
            // 推送消息
            List<Integer> rsp = xinGeUtil.getPushService().accountList(req);
        } catch (XinGeException e) {
            logger.error("推送失败", e);
        }
    }
}